#include <iostream>

using namespace std;
// 788.旋转数字
// 如果X的每位数字逐个地被旋转180度后，仍可以得到一个有效的，且和X不同的数，则称X为好数。要求每位数字都要被旋转
// 如果一个数的每位数字被旋转以后仍然还是一个数字，则这个数是有效的。0、1和8旋转后仍然是自己；2和5可以旋转成对方(2和5互为镜像);6和9同理，除了这些以外其他数字旋转以后都不再是有效数字。
// 有一个正整数N,计算从1到N中有多少个数是好数?
class Solution {
public:
    int rotatedDigits(int n) {
        int ans = 0;
        for(int i = 1; i <= n; i++) {
            int flag = false;
            int x = i;
            while(x) {  // 分解x
                int d = x % 10;
                if(d == 2 || d == 5 || d == 6 || d == 9) flag = true;
                else if(d == 3 || d == 4 || d == 7) {
                    flag = false;
                    break;
                }
                x /= 10;
            }
            if(flag) ans++;
        }
        return ans;
    }
};
int main() {
    std::cout << Solution().rotatedDigits(10) << std::endl; // 4
    std::cout << Solution().rotatedDigits(1) << std::endl; // 0
    std::cout << Solution().rotatedDigits(2) << std::endl; // 1

    return 0;
}
